return {
  "nvim-telescope/telescope.nvim",
  dependencies = {
    "nvim-treesitter/nvim-treesitter",
    {
      "lpoto/telescope-tasks.nvim",
      config = function()
        local telescope = require "telescope"
        telescope.setup {
          extensions = {
            -- NOTE: this setup is optional
            tasks = {
              theme = "ivy",
              output = {
                style = "float", -- "split" | "float" | "tab"
                layout = "center", -- "left" | "right" | "center" | "below" | "above"
                scale = 0.4, -- output window to editor size ratio
                -- NOTE: scale and "center" layout are only relevant when style == "float"
              },
              env = {
                cargo = {
                  -- Example environment used when running cargo projects
                  RUST_LOG = "debug",
                  -- ...
                },
                -- ...
              },
              binary = {
                -- Example binary used when running python projects
                python = "python3",
                -- ...
              },
              -- NOTE: environment and commands may be modified for each task separately from the picker

              -- other picker setup values
            },
          },
        }
        local default = telescope.extensions.tasks.generators.default
        default.all()
        -- Load the tasks telescope extension
        -- require("telescope").load_extension "tasks"
      end,
    },
    {
      "nvim-telescope/telescope-project.nvim",
      dependencies = {
        "ThePrimeagen/harpoon",
        {
          "ahmedkhalf/project.nvim",
          config = function()
            -- lua
            require("nvim-tree").setup {
              sync_root_with_cwd = true,
              respect_buf_cwd = true,
              update_focused_file = {
                enable = true,
                update_root = true,
              },
            }
            require("project_nvim").setup {
              -- Manual mode doesn't automatically change your root directory, so you have
              -- the option to manually do so using `:ProjectRoot` command.
              manual_mode = false,

              -- Methods of detecting the root directory. **"lsp"** uses the native neovim
              -- lsp, while **"pattern"** uses vim-rooter like glob pattern matching. Here
              -- order matters: if one is not detected, the other is used as fallback. You
              -- can also delete or rearangne the detection methods.
              detection_methods = { "lsp", "pattern" },

              -- All the patterns used to detect root dir, when **"pattern"** is in
              -- detection_methods
              patterns = { ".git", "_darcs", ".hg", ".bzr", ".svn", "Makefile", "package.json" },

              -- Table of lsp clients to ignore by name
              -- eg: { "efm", ... }
              ignore_lsp = {},

              -- Don't calculate root dir on specific directories
              -- Ex: { "~/.cargo/*", ... }
              exclude_dirs = {},

              -- Show hidden files in telescope
              show_hidden = false,

              -- When set to false, you will get a message when project.nvim changes your
              -- directory.
              silent_chdir = true,

              -- What scope to change the directory, valid options are
              -- * global (default)
              -- * tab
              -- * win
              scope_chdir = "global",

              -- Path where project.nvim will store the project history for use in
              -- telescope
              datapath = vim.fn.stdpath "data",
            }
            require("telescope").load_extension "projects"
          end,
        },
      },
      config = function()
        require("telescope").load_extension "project"
        vim.api.nvim_set_keymap(
          "n",
          "<C-p>",
          ":lua require'telescope'.extensions.project.project{}<CR>",
          { noremap = true, silent = true }
        )
        local project_actions = require "telescope._extensions.project.actions"
        require("telescope").setup {
          extensions = {
            project = {
              base_dirs = {
                vim.fn.stdpath "data",
                vim.fn.stdpath "config",
                -- '~/AppData/Local/nvim',
              },
              hidden_files = true, -- default: false
              theme = "dropdown",
              order_by = "asc",
              search_by = "title",
              sync_with_nvim_tree = true, -- default false
              -- default for on_project_selected = find project files
              on_project_selected = function(prompt_bufnr)
                -- Do anything you want in here. For example:
                project_actions.change_working_directory(prompt_bufnr, false)
                require("harpoon.ui").nav_file(1)
              end,
            },
          },
        }
      end,
    },
  },
  cmd = "Telescope",
  opts = function()
    return require "nvchad.configs.telescope"
  end,
  config = function(_, opts)
    dofile(vim.g.base46_cache .. "telescope")
    local telescope = require "telescope"
    telescope.setup(opts)

    -- load extensions
    for _, ext in ipairs(opts.extensions_list) do
      telescope.load_extension(ext)
    end
  end,
}
